<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <a href="#/home">首页</a>
    <a href="#/list">列表</a>
    <a href="#/app">应用</a>


    <div id="box" class="box">

    </div>

    <script>
        class Router{
            constructor(props) {
                // 为了在别的地方也拿到routes，给添加到this上
                this.routes = props.routes
                this.box = document.getElementById('box')
                // 
                this.event = {}
            }
            init() {
                // 给this.event添加key(url), value(改变视图的内容)
                this.routes.forEach(item => {
                    this.event[item.path] = () => {
                        this.box.innerHTML = item.com
                    }
                })

                // 监听路由发生改变的事件  ==> onHashChange
                window.addEventListener('hashchange', () => {
                    // location.hash  获取url 上 #后的内容（包涵#）
                    let path = location.hash.slice(1)
                    this.event[path]()
                })
            }
        }

        const routes = [
           {
               path: "/home",
               com: "我是首页中的内容"
           },
           {
               path: "/list",
               com: "我是列表中的内容"
           },
           {
               path: "/app",
               com: "我是应用中的内容"
           }
        ]

        // 使用
        let router = new Router({
            routes
        })
        router.init()


        // let obj = {
        //     "/home": () => {
        //         document.getElementById('box').innerHTML = '首页'
        //     },
        //     "/list": () => {
        //         document.getElementById('box').innerHTML = '列表'
        //     },
        //     "/app": () => {
        //         document.getElementById('box').innerHTML = '应用'
        //     }
        // }

        // obj['/app']()
    </script>
</body>
</html>